data load
library(dplyr)
library(data.table)
library(ggplot2)
library(ggmap)
library(RColorBrewer)
library(leaflet)
library(scales)
library(plotly)
powerplants=read.csv('global_power_plant_database.csv')
powerplants[is.na(powerplants)] = 0
powerplantsUSA = powerplants %>% filter(country_long == "United States of America")
Data prep
powerplantsUSAFuel = powerplantsUSA %>% group_by(primary_fuel)
powerplantsUSAFuelYear = powerplantsUSAFuel %>% summarise(energy2013 = 0.5* (sum(generation_gwh_2013) + sum(estimated_generation_gwh_2013)),
energy2014 = 0.5* (sum(generation_gwh_2014) + sum(estimated_generation_gwh_2014)),
energy2015 = 0.5* (sum(generation_gwh_2015) + sum(estimated_generation_gwh_2015)),
energy2016 = 0.5* (sum(generation_gwh_2016) + sum(estimated_generation_gwh_2016)),
energy2017 = 0.5* (sum(generation_gwh_2017) + sum(estimated_generation_gwh_2017)),
)
powerplantsUSAFuelYearDF = as.data.frame(powerplantsUSAFuelYear)
powerplantsUSAFuelYearLabeled = powerplantsUSAFuelYearDF[,-1]
row.names(powerplantsUSAFuelYearLabeled) = powerplantsUSAFuelYearDF[,1]
transposePowerplantsUSAFuelYear = transpose(powerplantsUSAFuelYearLabeled)
colnames(transposePowerplantsUSAFuelYear) = powerplantsUSAFuelYearDF[,1]
transposePowerplantsUSAFuelYear$Year = c(2013,2014,2015,2016,2017)
totalEnergy = powerplantsUSAFuelYear %>% mutate(total = energy2013+ energy2014 +energy2015 + energy2016 + energy2017)
map
powertype = "Wind"
leaflet(powerplants %>% filter(primary_fuel == powertype)) %>% addTiles() %>% addMarkers(~longitude,~latitude,popup= ~primary_fuel,label= ~name)
Total energy bar chart
totalEnergyChart=ggplot(totalEnergy,aes(x=reorder(primary_fuel,total),y=total,fill=primary_fuel)) + geom_bar(stat="identity") + coord_flip() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) + theme(axis.text.x = element_text(angle=90)) + ylab("Energy Accumulated MWH") + xlab("Primary Fuel")
totalEnergyChart

energy produced
data_long = melt(transposePowerplantsUSAFuelYear, id="Year")
Warning in melt(transposePowerplantsUSAFuelYear, id = "Year") :
The melt generic in data.table has been passed a data.frame and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(transposePowerplantsUSAFuelYear). In the next version, this warning will become an error.
colnames(data_long) = c("Year","primary_fuel","energy")
lineplot = ggplot(data_long, aes(x=Year,y=energy, color= primary_fuel)) + ylab("Energy Produced MWH") + xlab("Year") + geom_line() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) +ggtitle("Energy Produced over the Years per Type")
ggplotly(lineplot)
Warning in is.na(ticktext) :
is.na() applied to non-(list or vector) of type 'expression'
number of plants by type
numberOfPlants = powerplantsUSAFuel %>% summarize(number = n())
ggplot(numberOfPlants,aes(x=reorder(primary_fuel,number), y=number,fill=primary_fuel)) + geom_bar(stat="identity") + theme(axis.text.x = element_text(angle=90)) + coord_flip() + scale_y_continuous(trans= 'log10', labels = trans_format('log10',math_format(10^.x))) + xlab("Primary Fuel") + ylab("Number of Plants") +ggtitle("Number of Plants per Type")

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpkYXRhIGxvYWQKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdnbWFwKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeShwbG90bHkpCgpwb3dlcnBsYW50cz1yZWFkLmNzdignZ2xvYmFsX3Bvd2VyX3BsYW50X2RhdGFiYXNlLmNzdicpCgpwb3dlcnBsYW50c1tpcy5uYShwb3dlcnBsYW50cyldID0gMApwb3dlcnBsYW50c1VTQSA9IHBvd2VycGxhbnRzICU+JSBmaWx0ZXIoY291bnRyeV9sb25nID09ICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiKQpgYGAKRGF0YSBwcmVwCmBgYHtyfQpwb3dlcnBsYW50c1VTQUZ1ZWwgPSBwb3dlcnBsYW50c1VTQSAlPiUgZ3JvdXBfYnkocHJpbWFyeV9mdWVsKSAKCnBvd2VycGxhbnRzVVNBRnVlbFllYXIgPSBwb3dlcnBsYW50c1VTQUZ1ZWwgJT4lIHN1bW1hcmlzZShlbmVyZ3kyMDEzID0gMC41KiAoc3VtKGdlbmVyYXRpb25fZ3doXzIwMTMpICsgc3VtKGVzdGltYXRlZF9nZW5lcmF0aW9uX2d3aF8yMDEzKSksCiAgICAgICAgICBlbmVyZ3kyMDE0ID0gMC41KiAoc3VtKGdlbmVyYXRpb25fZ3doXzIwMTQpICsgc3VtKGVzdGltYXRlZF9nZW5lcmF0aW9uX2d3aF8yMDE0KSksCiAgICAgICAgICBlbmVyZ3kyMDE1ID0gMC41KiAoc3VtKGdlbmVyYXRpb25fZ3doXzIwMTUpICsgc3VtKGVzdGltYXRlZF9nZW5lcmF0aW9uX2d3aF8yMDE1KSksCiAgICAgICAgICBlbmVyZ3kyMDE2ID0gMC41KiAoc3VtKGdlbmVyYXRpb25fZ3doXzIwMTYpICsgc3VtKGVzdGltYXRlZF9nZW5lcmF0aW9uX2d3aF8yMDE2KSksCiAgICAgICAgICBlbmVyZ3kyMDE3ID0gMC41KiAoc3VtKGdlbmVyYXRpb25fZ3doXzIwMTcpICsgc3VtKGVzdGltYXRlZF9nZW5lcmF0aW9uX2d3aF8yMDE3KSksCiAgICAgICAgICApCgpwb3dlcnBsYW50c1VTQUZ1ZWxZZWFyREYgPSBhcy5kYXRhLmZyYW1lKHBvd2VycGxhbnRzVVNBRnVlbFllYXIpCnBvd2VycGxhbnRzVVNBRnVlbFllYXJMYWJlbGVkID0gcG93ZXJwbGFudHNVU0FGdWVsWWVhckRGWywtMV0Kcm93Lm5hbWVzKHBvd2VycGxhbnRzVVNBRnVlbFllYXJMYWJlbGVkKSA9IHBvd2VycGxhbnRzVVNBRnVlbFllYXJERlssMV0KdHJhbnNwb3NlUG93ZXJwbGFudHNVU0FGdWVsWWVhciA9IHRyYW5zcG9zZShwb3dlcnBsYW50c1VTQUZ1ZWxZZWFyTGFiZWxlZCkKY29sbmFtZXModHJhbnNwb3NlUG93ZXJwbGFudHNVU0FGdWVsWWVhcikgPSBwb3dlcnBsYW50c1VTQUZ1ZWxZZWFyREZbLDFdCnRyYW5zcG9zZVBvd2VycGxhbnRzVVNBRnVlbFllYXIkWWVhciA9IGMoMjAxMywyMDE0LDIwMTUsMjAxNiwyMDE3KQoKCnRvdGFsRW5lcmd5ID0gcG93ZXJwbGFudHNVU0FGdWVsWWVhciAlPiUgbXV0YXRlKHRvdGFsID0gZW5lcmd5MjAxMysgZW5lcmd5MjAxNCArZW5lcmd5MjAxNSArIGVuZXJneTIwMTYgKyBlbmVyZ3kyMDE3KQoKYGBgCgptYXAKYGBge3J9CnBvd2VydHlwZSA9ICJXaW5kIgpsZWFmbGV0KHBvd2VycGxhbnRzICU+JSBmaWx0ZXIocHJpbWFyeV9mdWVsID09IHBvd2VydHlwZSkpICU+JSBhZGRUaWxlcygpICU+JSBhZGRNYXJrZXJzKH5sb25naXR1ZGUsfmxhdGl0dWRlLHBvcHVwPSB+cHJpbWFyeV9mdWVsLGxhYmVsPSB+bmFtZSkKYGBgCgpUb3RhbCBlbmVyZ3kgYmFyIGNoYXJ0CmBgYHtyfQp0b3RhbEVuZXJneUNoYXJ0PWdncGxvdCh0b3RhbEVuZXJneSxhZXMoeD1yZW9yZGVyKHByaW1hcnlfZnVlbCx0b3RhbCkseT10b3RhbCxmaWxsPXByaW1hcnlfZnVlbCkpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArIGNvb3JkX2ZsaXAoKSArIHNjYWxlX3lfY29udGludW91cyh0cmFucz0gJ2xvZzEwJywgbGFiZWxzID0gdHJhbnNfZm9ybWF0KCdsb2cxMCcsbWF0aF9mb3JtYXQoMTBeLngpKSkgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpICsgeWxhYigiRW5lcmd5IEFjY3VtdWxhdGVkIE1XSCIpICsgeGxhYigiUHJpbWFyeSBGdWVsIikKdG90YWxFbmVyZ3lDaGFydApgYGAKCmVuZXJneSBwcm9kdWNlZApgYGB7cn0KCmRhdGFfbG9uZyA9IG1lbHQodHJhbnNwb3NlUG93ZXJwbGFudHNVU0FGdWVsWWVhciwgaWQ9IlllYXIiKQpjb2xuYW1lcyhkYXRhX2xvbmcpID0gYygiWWVhciIsInByaW1hcnlfZnVlbCIsImVuZXJneSIpCgpsaW5lcGxvdCA9IGdncGxvdChkYXRhX2xvbmcsIGFlcyh4PVllYXIseT1lbmVyZ3ksIGNvbG9yPSBwcmltYXJ5X2Z1ZWwpKSArIHlsYWIoIkVuZXJneSBQcm9kdWNlZCBNV0giKSArIHhsYWIoIlllYXIiKSArIGdlb21fbGluZSgpICsgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zPSAnbG9nMTAnLCBsYWJlbHMgPSB0cmFuc19mb3JtYXQoJ2xvZzEwJyxtYXRoX2Zvcm1hdCgxMF4ueCkpKSArZ2d0aXRsZSgiRW5lcmd5IFByb2R1Y2VkIG92ZXIgdGhlIFllYXJzIHBlciBUeXBlIikKCmdncGxvdGx5KGxpbmVwbG90KQpgYGAKCm51bWJlciBvZiBwbGFudHMgYnkgdHlwZQpgYGB7cn0KbnVtYmVyT2ZQbGFudHMgPSBwb3dlcnBsYW50c1VTQUZ1ZWwgJT4lIHN1bW1hcml6ZShudW1iZXIgPSBuKCkpCmdncGxvdChudW1iZXJPZlBsYW50cyxhZXMoeD1yZW9yZGVyKHByaW1hcnlfZnVlbCxudW1iZXIpLCB5PW51bWJlcixmaWxsPXByaW1hcnlfZnVlbCkpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkgKyBjb29yZF9mbGlwKCkgKyBzY2FsZV95X2NvbnRpbnVvdXModHJhbnM9ICdsb2cxMCcsIGxhYmVscyA9IHRyYW5zX2Zvcm1hdCgnbG9nMTAnLG1hdGhfZm9ybWF0KDEwXi54KSkpICsgeGxhYigiUHJpbWFyeSBGdWVsIikgKyB5bGFiKCJOdW1iZXIgb2YgUGxhbnRzIikgK2dndGl0bGUoIk51bWJlciBvZiBQbGFudHMgcGVyIFR5cGUiKQpgYGAKCmBgYHtyfQoKYGBg